package _20250226;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import java.util.function.BiConsumer;

public class VOTE {
    public  static  class Main {
    }

    /**
     * 某班级 80 名学生组织秋游，班长给出 A、B、C、D 四个景点，每人只能选一个，要统计出想去人数最多的景点。
     */
    public static void main(String[] args) {
        try {
            //模拟人数投票
            ArrayList<String> voteResultList=new ArrayList<>();
            int studentNumber=80;
            voteResult(voteResultList,studentNumber);
            //统计人数初始化
            Map<String,Integer> countVote=new HashMap<>();
            //统计过程
            countVote(voteResultList,countVote);
            //输出结果
            System.out.println(countVote);
            //统计最多人去的景点
            popularVote(countVote);
        } catch (Exception e) {
            System.err.println("异常："+e.getMessage());
        }
    }

    /**
     * 统计最多人去的景点
     * @param map 统计箱
     */
    private static void popularVote(Map<String, Integer> map) {
//        // 使用数组来绕过 Lambda 表达式对变量的限制
//        String[] mostPopular= {""};
//        // 使用数组来绕过 Lambda 表达式对变量的限制
//        int[] maxVote = {0};
//       map.forEach((name,number)->{
//           if (maxVote[0]<number){
//               mostPopular[0]=name;
//               maxVote[0]=number;
//           }
//       });
//        System.out.println("最受欢迎的景点是"+mostPopular[0]+"，有"+maxVote[0]+"人投票");
        
       Map.Entry<String,Integer>maxVote=null;
        for (Map.Entry<String,Integer>vote:map.entrySet()) {
            if(maxVote==null||vote.getValue()>maxVote.getValue()){
                maxVote=vote;
            }
        }if (maxVote != null) {
            System.out.println("最受欢迎的景点是" + maxVote.getKey() + "，有" + maxVote.getValue() + "人投票");
        }
    }

    /**
     * 统计方法
     * @param voteResultList 投票箱
     * @param map  统计箱
     */
    private static void countVote(ArrayList<String> voteResultList, Map<String, Integer> map) {
        for (String vote:voteResultList) {
            map.put(vote, map.getOrDefault(vote, 0) + 1);
        }
    }

    /**
     * 模拟投票人数
     * @param voteResultList 投票箱
     * @param studentNumber  学生人数
     */
    private static void voteResult(ArrayList<String> voteResultList, int studentNumber) {
        Random random = new Random();
        String[] attractions = {"A", "B", "C", "D"};
        for (int i = 0; i < studentNumber; i++) {
            int index = random.nextInt(attractions.length);
            voteResultList.add(attractions[index]);
        }
    }
}
